home *** CD-ROM | disk | FTP | other *** search
/ Ham Radio 2000 #2 / Ham Radio 2000 - Volume 2.iso / HAMV2 / TCP_IP / TNOS230S / PPPDUMP.C < prev    next >
C/C++ Source or Header  |  1996-08-29  |  3KB  |  103 lines

  1. /*
  2.  *    PPPDUMP.C
  3.  *
  4.  *    12-89    -- Katie Stevens (dkstevens@ucdavis.edu)
  5.  *           UC Davis, Computing Services
  6.  *    PPP.08    05-90    [ks] improve tracing reports
  7.  *    PPP.09  05-90    [ks] add UPAP packet reporting
  8.  *    PPP.14    08-90    [ks] change UPAP to PAP for consistency with RFC1172
  9.  *    PPP.15    09-90    [ks] update to KA9Q NOS v900828
  10.  *    Jan 91    [Bill Simpson] small changes to match rewrite of PPP
  11.  *    Aug 91    [Bill Simpson] fixed some buffer loss
  12.  */
  13. #include "global.h"
  14. #ifdef PPP
  15. #include "mbuf.h"
  16. #include "iface.h"
  17. #include "ppp.h"
  18. #include "trace.h"
  19.  
  20. #if !defined(_lint)
  21. static char rcsid[] OPTIONAL = "$Id: pppdump.c,v 1.10 1996/08/29 12:11:16 root Exp root $";
  22. #endif
  23.  
  24.  
  25. /* dump a PPP packet */
  26. void
  27. ppp_dump (fp, bpp, unused)
  28. FILE *fp;
  29. struct mbuf **bpp;
  30. int unused OPTIONAL;
  31. {
  32. struct ppp_hdr hdr;
  33. struct mbuf *tbp;
  34.  
  35.     traceprintf (fp, "PPP: len %3u\t", len_p (*bpp));
  36.  
  37.     /* HDLC address and control fields may be compressed out */
  38.     if ((byte_t) (*bpp)->data[0] != HDLC_ALL_ADDR) {
  39.         traceprintf (fp, "(compressed ALL/UI)\t");
  40.     } else if ((byte_t) (*bpp)->data[1] != HDLC_UI) {
  41.         traceprintf (fp, "(missing UI!)\t");
  42.     } else {
  43.         /* skip address/control fields */
  44.         (void) pull16 (bpp);
  45.     }
  46.  
  47.     /* Initialize the expected header */
  48.     hdr.addr = HDLC_ALL_ADDR;
  49.     hdr.control = HDLC_UI;
  50.     hdr.protocol = (int16) PULLCHAR (bpp);
  51.  
  52.     /* First byte of PPP protocol field may be compressed out */
  53.     if (hdr.protocol & 0x01)
  54.         traceprintf (fp, "compressed ");
  55.     else {
  56.         hdr.protocol = (int16) ((hdr.protocol << 8) | PULLCHAR (bpp));
  57.  
  58.         /* Second byte of PPP protocol field must be odd */
  59.         if (!(hdr.protocol & 0x01))
  60.             traceprintf (fp, "(not odd!) ");
  61.     }
  62.  
  63.     traceprintf (fp, "protocol: ");
  64.     switch (hdr.protocol) {
  65.         case PPP_IP_PROTOCOL:
  66.             traceprintf (fp, "IP\n");
  67.             ip_dump (fp, bpp, 1);
  68.             break;
  69.         case PPP_IPCP_PROTOCOL:
  70.             traceprintf (fp, "IPCP\n");
  71.             break;
  72.         case PPP_LCP_PROTOCOL:
  73.             traceprintf (fp, "LCP\n");
  74.             break;
  75.         case PPP_PAP_PROTOCOL:
  76.             traceprintf (fp, "PAP\n");
  77.             break;
  78.         case PPP_COMPR_PROTOCOL:
  79.             traceprintf (fp, "VJ Compressed TCP/IP\n");
  80.             vjcomp_dump (fp, bpp, 0);
  81.             break;
  82.         case PPP_UNCOMP_PROTOCOL:
  83.             traceprintf (fp, "VJ Uncompressed TCP/IP\n");
  84.             /* Get our own copy so we can mess with the data */
  85.             if (bpp && (tbp = copy_p (*bpp, len_p (*bpp))) == NULLBUF)
  86.                 return;
  87.  
  88.             traceprintf (fp, "\tconnection 0x%02x\n",
  89.                      tbp->data[9]);    /* FIX THIS! */
  90.             /* Restore the bytes used with Uncompressed TCP */
  91.             tbp->data[9] = TCP_PTCL;    /* FIX THIS! */
  92.             ip_dump (fp, &tbp, 1);
  93.             free_p (tbp);
  94.             break;
  95.         default:
  96.             traceprintf (fp, "unknown 0x%04x\n", hdr.protocol);
  97.             break;
  98.     }
  99. }
  100.  
  101.  
  102. #endif /* PPP */
  103.